import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common';
import { TagService } from './tag.service';
import { Tag } from '../../entities/tag.entity';
import { Admin } from '../../common/decorators/admin.decorator';
import { ApiTags, ApiOperation, ApiResponse, ApiBody, ApiParam } from '@nestjs/swagger';

@ApiTags('标签管理（管理员）')
@Controller('api/admin/tags')
export class TagAdminController {
  constructor(private readonly tagService: TagService) {}

  // 获取所有标签（管理员）
  @Admin()
  @Get()
  @ApiOperation({
    summary: '获取所有标签',
    description: '管理员获取系统中的所有标签，包括已禁用的',
  })
  @ApiResponse({
    status: 200,
    description: '获取成功',
    type: [Tag],
  })
  @ApiResponse({
    status: 403,
    description: '无管理员权限',
  })
  findAllAdmin() {
    return this.tagService.findAllAdmin();
  }

    // 获取热门标签（管理员）
  @Admin()
  @Get('popular')
  @ApiOperation({
    summary: '获取热门标签',
    description: '管理员获取系统中使用频率最高的标签',
  })
  @ApiResponse({
    status: 200,
    description: '获取成功',
    type: [Tag],
  })
  @ApiResponse({
    status: 403,
    description: '无管理员权限',
  })
  getPopularTags() {
    return this.tagService.getPopularTags();
  }

  // 获取标签详情（管理员）
  @Admin()
  @Get(':id')
  @ApiOperation({
    summary: '获取标签详情',
    description: '管理员获取指定标签的详细信息',
  })
  @ApiParam({
    name: 'id',
    description: '标签ID',
    example: '1',
  })
  @ApiResponse({
    status: 200,
    description: '获取成功',
    type: Tag,
  })
  @ApiResponse({
    status: 403,
    description: '无管理员权限',
  })
  @ApiResponse({
    status: 404,
    description: '标签不存在',
  })
  findOneAdmin(@Param('id') id: number) {
    return this.tagService.findOne(id);
  }

  // 创建标签（管理员）
  @Admin()
  @Post()
  @ApiOperation({
    summary: '创建标签',
    description: '管理员创建新的标签',
  })
  @ApiBody({
    type: Tag,
    description: '标签信息',
  })
  @ApiResponse({
    status: 201,
    description: '创建成功',
    type: Tag,
  })
  @ApiResponse({
    status: 403,
    description: '无管理员权限',
  })
  create(@Body() tagData: Partial<Tag>) {
    return this.tagService.create(tagData);
  }

  // 更新标签状态（管理员）
  @Admin()
  @Patch(':id/status')
  @ApiOperation({
    summary: '更新标签状态',
    description: '管理员更新标签的启用/禁用状态',
  })
  @ApiParam({
    name: 'id',
    description: '标签ID',
    example: '1',
  })
  @ApiBody({
    schema: {
      example: {
        isActive: 1, // 0禁用，1启用
      },
    },
  })
  @ApiResponse({
    status: 200,
    description: '更新成功',
    type: Tag,
  })
  @ApiResponse({
    status: 403,
    description: '无管理员权限',
  })
  @ApiResponse({
    status: 404,
    description: '标签不存在',
  })
  updateStatus(@Param('id') id: number, @Body('isActive') isActive: number) {
    return this.tagService.updateStatus(id, isActive);
  }

  // 更新标签（管理员）
  @Admin()
  @Patch(':id')
  @ApiOperation({
    summary: '更新标签',
    description: '管理员更新指定标签的信息',
  })
  @ApiParam({
    name: 'id',
    description: '标签ID',
    example: '1',
  })
  @ApiBody({
    type: Tag,
    description: '更新的标签信息',
  })
  @ApiResponse({
    status: 200,
    description: '更新成功',
    type: Tag,
  })
  @ApiResponse({
    status: 403,
    description: '无管理员权限',
  })
  @ApiResponse({
    status: 404,
    description: '标签不存在',
  })
  update(@Param('id') id: number, @Body() tagData: Partial<Tag>) {
    return this.tagService.update(id, tagData);
  }

  // 删除标签（管理员）
  @Admin()
  @Delete(':id')
  @ApiOperation({
    summary: '删除标签',
    description: '管理员删除指定的标签',
  })
  @ApiParam({
    name: 'id',
    description: '标签ID',
    example: '1',
  })
  @ApiResponse({
    status: 200,
    description: '删除成功',
  })
  @ApiResponse({
    status: 403,
    description: '无管理员权限',
  })
  @ApiResponse({
    status: 404,
    description: '标签不存在',
  })
  remove(@Param('id') id: number) {
    return this.tagService.remove(id);
  }


}